import Vue from 'vue'
import Vuex from 'vuex'

import user from './user'

// 插件化的方式 注册vuex
Vue.use(Vuex)

const store = new Vuex.Store({
  state: {
    // 购物车的数据怎么定义？ 写什么数据结构？
    // 下面这个 获取本地储存的方法 只能是同步写法，因为异步的代码在这里的话，获取数据是在里面的success回调函数里面，直接写的话获取不到值。所以只能写同步的方法
    cart: uni.getStorageSync('cart') || []
  },
  getters: {
    checkedGoodsList(state) {
      // 在gettes里面访问 state
      // 不能写this
      return state.cart.filter(item => item.goods_checked)
    },
    // 选中商品的总数量
    checkedGoodsCount(_, getters){
      // console.log(333, getters);
      // 在getters里面访问getters --- 在函数的第二个参数里面 就是当前的getters，不能写this和state
      // let count = 0
      // getters.checkedGoodsList.forEach(item => count += item.goods_number)
      // return count
      
      return getters.checkedGoodsList.reduce((prev, item) => {
        prev += item.goods_number
        return prev
      }, 0)
    },
    // 选中商品的中价格
    checkedGoodsPrice(_, getters){
      let sum = 0;
      getters.checkedGoodsList.forEach(item => {
        sum += item.goods_price * item.goods_number
      })
      return sum
    }
    // 选中商品的总价格
  },
  mutations: {
    // vuex一般的写法， 先自己定一个数据结构，然后在定义一个操作这个数据的方法mutatition
    addCartMutation(state, payload){
      state.cart = payload
      
      uni.setStorage({
        key:"cart",
        data: payload
      })
      // wx.setStorageSync()
    }
  },
  modules: {
    user
  }
})

// commonjs ---  module.exports + require
// es6 module --- export + import
export default store